package main;

import java.net.URL;
import java.util.Scanner;

import gui.GuiController;
import gui.UpdateDialog;
import helden.plugin.werteplugin2.PluginHeld2;
import helden.plugin.werteplugin3.PluginHeldenWerteWerkzeug3;

import javax.swing.JFrame;

//import java.io.Writer;
//import java.io.File;
//import java.io.FileWriter;

import backend.DatenController;

/**
 * @author Christian
 * 
 */
public class Controller {

	/**
	 * Controller
	 */
	private static Controller controller = null;

	/**
	 * Guicontroller
	 */
	private static GuiController guiController = null;

	/**
	 * Datencontroller
	 */
	private static DatenController datenController = null;

	/**
	 * Versionsstring
	 */
	private static String version = "0.15f";

	/**
	 * BetaTag
	 */
	private static boolean betaTag = true;

	/**
	 * Xmlversion
	 */
	private static String xmlVersion = "1.1";

	/**
	 * @param frame
	 *            MainFrame
	 * @param phww
	 *            Heldenwerkzeug
	 * @param helden
	 *            Array mit allen Helden
	 */
	public Controller(final JFrame frame, PluginHeldenWerteWerkzeug3 phww, PluginHeld2[] helden) {

		controller = this;
		datenController = new DatenController(phww, helden);
		guiController = new GuiController(frame, "");
		javax.swing.SwingUtilities.invokeLater(new Runnable() {

			public void run() {

				String updateinfo = "";
				if (datenController.isUpdateCheck()) {
					updateinfo = checkVersion();
				}
				guiController.setHeadLine("Zauberinfo " + version + "  " + updateinfo);
				if (!updateinfo.equals("")
									&& !updateinfo.equals("  Updateserver wurde nicht gefunden!")) {
					UpdateDialog dialog = new UpdateDialog(frame, "", true, updateinfo);
					dialog.setLocationRelativeTo(null);
					dialog.setVisible(true);
				}
			}
		});
		// javax.swing.SwingUtilities.invokeLater(new Runnable() {
		//
		// public void run() {
		//
		// Writer fw = null;
		// try {
		// fw = new FileWriter(new File("alleZauber.txt"));
		// for (String name : datenController.getAlleAktivenZauberNamen()) {
		// fw.append("newZauberNameList.add(\""+name+"\");");
		// fw.append("\n");
		// }
		// fw.flush();
		// fw.close();
		// } catch (Exception e) {
		// e.printStackTrace();
		// }
		// }
		// });
		guiController.zeigeHauptfenster();
	}

	/**
	 * Gibt eine Instance des Controllers zurück
	 * 
	 * @return Controller
	 */
	public static Controller getInstance() {

		return controller;
	}

	/**
	 * Gibt die Instanz des Guicontrollers
	 * 
	 * @return GuiContoller
	 */
	public static GuiController getGuiController() {

		return guiController;
	}

	/**
	 * Gibt die Instanze des Datencontrollers zurück
	 * 
	 * @return Datencontroller
	 */
	public static DatenController getDatenController() {

		return datenController;
	}

	/**
	 * Gibt die aktuelle Codeversion zurück
	 * 
	 * @return Die laufende Version
	 */
	public static String getVersion() {

		return version;
	}

	/**
	 * 
	 * @return XMLVersion
	 */
	public static String getXMLVersion() {

		return xmlVersion;
	}

	/**
	 * Teste ob ein update vorliegt
	 * 
	 * @return Gibt die Info zurück, ob es ein Update gibt.
	 */
	public String checkVersion() {

		URL url;
		String newVersion = "";
		try {
			if (betaTag) {
				url = new URL("http://kulenkampff-vey.de/zauberinfo/download.php?version=beta");
			} else {
				url = new URL("http://kulenkampff-vey.de/zauberinfo/download.php?version=aktuell");
			}
			Scanner scanner = new Scanner(url.openStream());
			newVersion = scanner.next();
			scanner.nextLine();
			String headLine = "";
			if (newVersion.compareTo(version) > 0) {
				headLine += "  " + scanner.nextLine();
			}
			return headLine;
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		return "  Updateserver wurde nicht gefunden!";
	}

	/**
	 * @return the betaTag
	 */
	public static boolean isBetaTag() {

		return betaTag;
	}
}
